#include <UnitTest++/UnitTest++.h>
#include "../LinkedList.h"

using namespace MockItNow;

namespace
{
	struct TestItem
	{
		TestItem* next;
	};

	TEST (DefaultListHeadAndTailAreNull)
	{
		LinkedList<TestItem> list;
		CHECK_EQUAL((TestItem*)0, list.GetHead());
		CHECK_EQUAL((TestItem*)0, list.GetTail());
	}

	TEST (HeadAndTailPointToItemAfterAddOneItem)
	{
		TestItem* item = new TestItem();
		LinkedList<TestItem> list;
		list.Add(item);

		CHECK_EQUAL(item, list.GetHead());
		CHECK_EQUAL(item, list.GetTail());
	}

	TEST (HeadPointsToFirstItemAndTailPointsToSecondItemAfterAddTwoItems)
	{
		TestItem* item1 = new TestItem();
		TestItem* item2 = new TestItem();

		LinkedList<TestItem> list;

		list.Add(item1);
		list.Add(item2);

		CHECK_EQUAL(item1, list.GetHead());
		CHECK_EQUAL(item2, list.GetTail());
	}

	TEST (ItemsPointToEachOtherAfterAddTwoItems)
	{
		TestItem* item1 = new TestItem();
		TestItem* item2 = new TestItem();

		LinkedList<TestItem> list;

		list.Add(item1);
		list.Add(item2);

		CHECK_EQUAL(item2, item1->next);
	}
}
